home *** CD-ROM | disk | FTP | other *** search
/ Popular Request / By Popular Request (Arsenal Computer)(SysOptics Distribution System).ISO / amiga4 / sclk1_72.lha / SClock / Source / parse.c < prev    next >
C/C++ Source or Header  |  1993-12-26  |  8KB  |  334 lines

  1. /****************************************************************************
  2. *
  3. * VERSION
  4. *    $VER: parse.c 1.71 (18.12.93)
  5. *
  6. * DESCRIPTION
  7. *    Icon args parser...
  8. *
  9. * AUTHOR
  10. *    Rune Johnsrud
  11. *
  12. * COPYRIGHT
  13. *    (c) 1993 Amiga Freelancers
  14. *
  15. *****************************************************************************/
  16.  
  17. #define INTUI_V36_NAMES_ONLY
  18.  
  19. #include <exec/types.h>
  20. #include <exec/memory.h>
  21. #include <dos/dos.h>
  22. #include <workbench/workbench.h>
  23. #include <workbench/startup.h>
  24. #include <utility/date.h>
  25.  
  26. #include <clib/alib_stdio_protos.h>
  27.  
  28. #include <proto/dos.h>
  29. #include <proto/icon.h>
  30. #include <proto/exec.h>
  31.  
  32. #include <stdlib.h>
  33. #include <string.h>
  34.  
  35. #include "global.h"
  36.  
  37. /************************************************************************/
  38.  
  39. extern struct GlobalData *gd;
  40. extern struct ClockInfo *ci;
  41.  
  42. /************************************************************************/
  43.  
  44. static BOOL ReplaceTool(UBYTE **ttarr, UBYTE *ts, UBYTE *rps);
  45.  
  46. /************************************************************************/
  47.  
  48.  
  49. WORD ParseIconArgs(struct WBStartup *wbs)
  50. {
  51.     struct DiskObject *dobj;
  52.     UBYTE **tarray;
  53.     UBYTE *s;
  54.     WORD errcode = NOERROR;
  55.  
  56.     if (!wbs) return GEN_ERR_NOICONARGS;
  57.  
  58.     CurrentDir(wbs->sm_ArgList->wa_Lock);
  59.  
  60.     if (dobj = GetDiskObject(wbs->sm_ArgList->wa_Name))
  61.     {
  62.         tarray = (char **) dobj->do_ToolTypes;
  63.  
  64.         if (s = FindToolType(tarray, "PUBSCREEN"))
  65.             strncpy(ci->PubScreenName, s, MAXPUBSCREENNAME);
  66.         else
  67.             strcpy(ci->PubScreenName, "Workbench");
  68.  
  69.         if (s = FindToolType(tarray, "CLOCKTYPE"))
  70.         {
  71.             if (MatchToolValue(s, "ANALOG"))
  72.                 ci->ClockType = CT_ANALOG;
  73.             else
  74.                 ci->ClockType = CT_DIGITAL;
  75.         }
  76.  
  77.         if (s = FindToolType(tarray, "TOPPOS"))
  78.             ci->Top = atoi(s);
  79.  
  80.         if (s = FindToolType(tarray, "LEFTPOS"))
  81.             ci->Left = atoi(s);
  82.  
  83.         if (s = FindToolType(tarray, "WIDTH"))
  84.             ci->Width = atoi(s);
  85.  
  86.         if (ci->Width <= MIN_ACLOCK_WIDTH) ci->Width = MIN_ACLOCK_WIDTH;
  87.  
  88.         if (s = FindToolType(tarray, "HEIGHT"))
  89.             ci->Height = atoi(s);
  90.  
  91.         if (ci->Height <= MIN_ACLOCK_HEIGHT) ci->Height = MIN_ACLOCK_HEIGHT;
  92.  
  93.         if (s = FindToolType(tarray, "FONTNAME"))
  94.             strncpy(ci->FontName, s, 254);
  95.         else
  96.             strcpy(ci->FontName, "topaz.font");
  97.  
  98.         if (s = FindToolType(tarray, "FONTSIZE"))
  99.             ci->FontSize = atoi(s);
  100.  
  101.         if (ci->FontSize > 127) ci->FontSize = 127;
  102.         if (ci->FontSize <   1) ci->FontSize =   1;
  103.  
  104.         gd->TextAttr.ta_Name  = ci->FontName;
  105.         gd->TextAttr.ta_YSize = ci->FontSize;
  106.         gd->TextAttr.ta_Style = FS_NORMAL;
  107.         gd->TextAttr.ta_Flags = 0;
  108.  
  109.         if (s = FindToolType(tarray, "BACKDROP"))
  110.             strncpy(ci->BDRPic, s, 254);
  111.         else
  112.             ci->BDRPic = NULL;
  113.  
  114. /*** Global Flags ********************************************************/
  115.  
  116.         if (s = FindToolType(tarray, "GLOBALFLAGS"))
  117.         {
  118. //            if (MatchToolValue(s, "SHOWTIME")) ci->ShowTime = TRUE;    /* Not yet implemented */
  119.  
  120.             if (MatchToolValue(s, "SHOWDATE"))
  121.                 ci->ShowDate = TRUE;
  122.             else
  123.                 ci->ShowDate = FALSE;
  124.  
  125.             if (MatchToolValue(s, "SHOWSEC")) ci->ShowSec = TRUE;
  126.  
  127.             if (MatchToolValue(s, "EDGEBEVEL"))
  128.                 ci->WinBevel = TRUE;
  129.             else
  130.                 ci->WinBevel = FALSE;
  131.  
  132.             if (MatchToolValue(s, "BACKDROPWIN")) ci->BDClock = TRUE;
  133.  
  134.             if (MatchToolValue(s, "LOCKPOS")) ci->LockPos = TRUE;
  135.         }
  136.  
  137. /*** Analog Flags ********************************************************/
  138.  
  139.         if (s = FindToolType(tarray, "ANALOGFLAGS"))
  140.         {
  141.             if (MatchToolValue(s, "PLACECLOCK"))    ci->PlaceClock = TRUE;
  142.             if (MatchToolValue(s, "SHOWDIAL"))        ci->ShowDial   = TRUE;
  143.             if (MatchToolValue(s, "AUTOSIZE"))        ci->AutoSize   = TRUE;
  144.         }
  145.  
  146. /*** Digital Flags *******************************************************/
  147.  
  148. //        if (s = FindToolType(tarray, "DIGITALFLAGS"))
  149. //        {
  150. //            /* We need some FLAGS!!! */
  151. //        }
  152.  
  153. /*************************************************************************/
  154.  
  155. //        if (s = FindToolType(tarray, "BEVELDEPTH"))        /* Not yet Implemented */
  156. //            ci->BevelDepth = atoi(s);
  157.  
  158.         if (s = FindToolType(tarray, "TEXTPEN"))
  159.             ci->TextPen = atoi(s);
  160.  
  161.         if (s = FindToolType(tarray, "BGPEN"))
  162.             ci->BGPen = atoi(s);
  163.  
  164.         if (s = FindToolType(tarray, "SHINEPEN"))
  165.             ci->ShinePen = atoi(s);
  166.  
  167.         if (s = FindToolType(tarray, "SHADOWPEN"))
  168.             ci->ShadowPen = atoi(s);
  169.  
  170.         if (s = FindToolType(tarray, "DATESEPARATOR"))
  171.         {
  172.             if (strlen(s) > 0)
  173.                 strncpy(ci->DateSep, s, 1);
  174.         }
  175.  
  176.         if (s = FindToolType(tarray, "TIMESEPARATOR"))
  177.         {
  178.             if (strlen(s) > 0)
  179.                 strncpy(ci->TimeSep, s, 1);
  180.         }
  181.  
  182.         if (s = FindToolType(tarray, "DATEFORMAT"))
  183.             ci->DateFormat = atoi(s);
  184.  
  185.         if (ci->DateFormat > NUM_OF_DATEFORMATS) ci->DateFormat = NUM_OF_DATEFORMATS;
  186.  
  187.         if (s = FindToolType(tarray, "DATESPACING"))
  188.             ci->DateSpc = atoi(s);
  189.  
  190.         if (ci->DateSpc < 0) ci->DateSpc = 0;
  191.  
  192.         if (s = FindToolType(tarray, "EDGESPACING"))
  193.             ci->EdgeSpace = atoi(s);
  194.  
  195.         if (ci->EdgeSpace < 1) ci->EdgeSpace = 1;
  196.  
  197.         if (s = FindToolType(tarray, "MINSMALLPEN"))
  198.             ci->apn.MinSmallPen = atoi(s);
  199.  
  200.         if (s = FindToolType(tarray, "MINLARGEPEN"))
  201.             ci->apn.MinLargePen = atoi(s);
  202.  
  203.         if (s = FindToolType(tarray, "SECPEN"))
  204.             ci->apn.SecPen = atoi(s);
  205.  
  206.         if (s = FindToolType(tarray, "MINPEN"))
  207.             ci->apn.MinPen = atoi(s);
  208.  
  209.         if (s = FindToolType(tarray, "HOURPEN"))
  210.             ci->apn.HourPen = atoi(s);
  211.  
  212.         if (s = FindToolType(tarray, "MINXSCALE"))
  213.             ci->ap.MIXScale = atoi(s);
  214.  
  215.         if (ci->ap.MIXScale < 1) ci->ap.MIXScale = 1;
  216.  
  217.         if (s = FindToolType(tarray, "MINYSCALE"))
  218.             ci->ap.MIYScale = atoi(s);
  219.  
  220.         if (ci->ap.MIYScale < 1) ci->ap.MIYScale = 1;
  221.  
  222.         if (s = FindToolType(tarray, "CLOCKLEFT"))
  223.             ci->ap.ClockLeft = atoi(s);
  224.  
  225.         if (ci->ap.ClockLeft < 1) ci->ap.ClockLeft = 1;
  226.  
  227.         if (s = FindToolType(tarray, "CLOCKTOP"))
  228.             ci->ap.ClockTop = atoi(s);
  229.  
  230.         if (ci->ap.ClockTop < 1) ci->ap.ClockTop = 1;
  231.  
  232.         if (s = FindToolType(tarray, "CLOCKHEIGHT"))
  233.             ci->ap.ClockHeight = atoi(s);
  234.  
  235.         if (ci->ap.ClockHeight <= MIN_ACLOCK_HEIGHT) ci->ap.ClockHeight = MIN_ACLOCK_HEIGHT;
  236.  
  237.         if (s = FindToolType(tarray, "CLOCKWIDTH"))
  238.             ci->ap.ClockWidth = atoi(s);
  239.  
  240.         if (ci->ap.ClockWidth <= MIN_ACLOCK_WIDTH) ci->ap.ClockWidth = MIN_ACLOCK_WIDTH;
  241.  
  242.         if (s = FindToolType(tarray, "DIALPEN"))
  243.             ci->apn.DialPen = atoi(s);
  244.  
  245.         if (s = FindToolType(tarray, "DIALOUTLINEPEN"))
  246.             ci->apn.DialOPen = atoi(s);
  247.  
  248.         FreeDiskObject(dobj);
  249.     }
  250.     else errcode = GEN_ERR_READICON;
  251.  
  252.     return errcode;    
  253. }
  254.  
  255.  
  256. static BOOL ReplaceTool(UBYTE **ttarr, UBYTE *ts, UBYTE *rps)
  257. {
  258.     WORD a = 0;
  259.  
  260.     while (ttarr[a])
  261.     {
  262.         if (strnicmp(ttarr[a], ts, strlen(ts)) == 0)
  263.         {
  264.             ttarr[a] = rps;
  265.             return FALSE;
  266.         }
  267.         a++;
  268.     }
  269.     return TRUE;
  270. }
  271.  
  272.  
  273. WORD SaveCurrSettings(struct WBStartup *wbs)
  274. {
  275.     struct DiskObject *dobj;
  276.     static UBYTE buff[7][512];
  277.     UBYTE **oldtooltypes, **tarray;
  278.     WORD errcode = NOERROR;
  279.  
  280.     if (!wbs) return GEN_ERR_NOICONARGS;
  281.  
  282.     CurrentDir(wbs->sm_ArgList->wa_Lock);
  283.  
  284.     if (dobj = GetDiskObject(wbs->sm_ArgList->wa_Name))
  285.     {
  286.         tarray = (char **) dobj->do_ToolTypes;
  287.  
  288.         sprintf(buff[0], "TOPPOS=%ld", gd->ClockWindow->TopEdge);
  289.         ReplaceTool(tarray, "TOPPOS", (UBYTE *) &buff[0]);
  290.  
  291.         sprintf(buff[1], "LEFTPOS=%ld", gd->ClockWindow->LeftEdge);
  292.         ReplaceTool(tarray, "LEFTPOS", (UBYTE *) &buff[1]);
  293.  
  294.         if (ci->AutoSize)
  295.         {
  296.             sprintf(buff[2], "WIDTH=%ld", ci->Width);
  297.             ReplaceTool(tarray, "WIDTH", (UBYTE *) &buff[2]);
  298.  
  299.             sprintf(buff[3], "HEIGHT=%ld", ci->Height);
  300.             ReplaceTool(tarray, "HEIGHT", (UBYTE *) &buff[3]);
  301.         }
  302.  
  303.         if (ci->ClockType == CT_DIGITAL)
  304.         {
  305.             sprintf(buff[4], "FONTNAME=%s", gd->TextAttr.ta_Name);
  306.             ReplaceTool(tarray, "FONTNAME", (UBYTE *) &buff[4]);
  307.  
  308.             sprintf(buff[5], "FONTSIZE=%ld", gd->TextAttr.ta_YSize);
  309.             ReplaceTool(tarray, "FONTSIZE", (UBYTE *) &buff[5]);
  310.         }
  311.  
  312.         if (ci->ClockType == CT_ANALOG)
  313.         {
  314.             sprintf(buff[6], "BACKDROP=%s", ci->BDRPic);
  315.             ReplaceTool(tarray, "BACKDROP", (UBYTE *) &buff[6]);
  316.         }
  317.  
  318.         oldtooltypes = dobj->do_ToolTypes;
  319.         dobj->do_ToolTypes = tarray;
  320.  
  321.         if (!PutDiskObject(wbs->sm_ArgList->wa_Name, dobj))
  322.             errcode = GEN_ERR_WRITEICON;
  323.  
  324.         dobj->do_ToolTypes = oldtooltypes;
  325.         FreeDiskObject(dobj);
  326.     }
  327.     else errcode = GEN_ERR_READICON;
  328.  
  329.     return errcode;
  330. }
  331.  
  332.  
  333. /* End Of File */
  334.